변수 및 상수에 대한 참조를 할 수 있는 것처럼 배열에 대해서도 포인터 변수를 사용해서 참조해서 빠르게 사용할 수 있습니다. 우리가 지금까지 사용했던 배열의 이름은 그 자체가 배열의 시작 주소(첫 번째 요소의 주소)를 가지고 있는 포인터입니다.

 

<그림> 포인터 배열

arr[0]

arr[1]

arr[2]

1

3

5

*(ptr + 0)

*(ptr + 1)

*(ptr + 2)

 

<코드> pointer_array.c

#include <stdio.h>

 

int main()

{

    int arr[3] = { 1, 3, 5 };

 

    int* ptr1 = arr; //[1] 배열 이름은 배열의 시작 주소

    int* ptr2 = &arr[0]; //[2] 0번째 배열의 시작 주소는 배열의 이름과 동일

 

    printf("%d, %d, %d\n", arr[0], arr[1], arr[2]); // 배열 직접 출력

    printf("%d, %d, %d\n", *ptr1, *(ptr1 + 1), *(ptr1 + 2)); // 포인터로 배열 출력

    printf("%d, %d, %d\n", *(ptr2 + 0), *(ptr2 + 1), *(ptr2 + 2));

 

    return 0;

}

</코드>

<실행.

1, 3, 5

1, 3, 5

1, 3, 5

</실행>

배열의 이름인 arr과 첫 번째 배열 요소의 주솟값은 같은 주솟값을 반환해 줍니다. 그래서 [1][2] 코드 모양은 같은 배열을 참조합니다.

그리고 포인터 배열을 역참조할 때에는 포인터 변수에 산술 연산자를 사용하여 + n 만큼 증가하면서 배열의 값을 참조할 수 있습니다.

*ptr1*(ptr1 + 0)은 같은 내용이므로 원하는 모양을 사용하면 됩니다.

 

 

 

 

 

 

 

Comments


Comments are closed